import '../../common/index.dart';

/// 患者沟通页面控制器
/// 管理患者对话列表、消息状态、通话功能等
class CommunicationController extends BaseGetXListController {
//   /// 搜索控制器
//   final TextEditingController searchController = TextEditingController();

//   /// 是否加载中
//   final RxBool isLoading = false.obs;

//   /// 对话列表
//   final RxList<ConversationModel> conversations = <ConversationModel>[].obs;

//   /// 状态列表
//   final RxList<String> statusList = <String>[
//     '全部',
//     '未读',
//     '在线',
//     '离线',
//     '紧急',
//   ].obs;

//   /// 当前选中状态
//   final RxString selectedStatus = '全部'.obs;

//   /// 搜索关键词
//   final RxString searchKeyword = ''.obs;

//   /// 未读通知数量
//   final RxInt unreadNotificationCount = 0.obs;

//   /// 当前页码
//   int currentPage = 1;

//   /// 每页数量
//   final int pageSize = 20;

//   /// 是否还有更多数据
//   bool hasMore = true;

//   @override
//   void onInit() {
//     super.onInit();
//     _initData();
//     _setupSearchListener();
//   }

//   @override
//   void onClose() {
//     searchController.dispose();
//     super.onClose();
//   }

//   /// 初始化数据
//   void _initData() {
//     loadConversations();
//     loadUnreadNotificationCount();
//   }

//   /// 设置搜索监听
//   void _setupSearchListener() {
//     searchController.addListener(() {
//       searchKeyword.value = searchController.text;
//     });
//   }

//   /// 加载对话列表
//   Future<void> loadConversations({bool isRefresh = false}) async {
//     try {
//       if (isRefresh) {
//         currentPage = 1;
//         hasMore = true;
//         isLoading.value = true;
//       }

//       // TODO: 实现 MedicalApis.getConversations API 调用
//       // final response = await MedicalApis.getConversations(
//       //   page: currentPage,
//       //   pageSize: pageSize,
//       //   status: selectedStatus.value == '全部' ? null : selectedStatus.value,
//       //   keyword: searchKeyword.value.isEmpty ? null : searchKeyword.value,
//       // );
//       //
//       // if (response.isSuccess && response.data != null) {
//       //   final List<dynamic> conversationsData = response.data['conversations'] ?? [];
//       //   final List<ConversationModel> newConversations = conversationsData
//       //       .map((item) => ConversationModel.fromJson(item))
//       //       .toList();
//       //
//       //   if (isRefresh) {
//       //     conversations.clear();
//       //   }
//       //   conversations.addAll(newConversations);
//       //
//       //   // 检查是否还有更多数据
//       //   hasMore = newConversations.length >= pageSize;
//       //   if (hasMore) {
//       //     currentPage++;
//       //   }
//       // } else {
//       //   // 如果请求失败，使用模拟数据
//       //   _loadMockData(isRefresh);
//       // }

//       // 暂时直接使用模拟数据
//       await _loadMockData(isRefresh);
//     } catch (e) {
//       debugLog('加载对话列表失败: $e');
//       // 使用模拟数据
//       await _loadMockData(isRefresh);
//     } finally {
//       isLoading.value = false;
//       if (isRefresh) {
//         refreshController.refreshCompleted();
//       } else {
//         refreshController.loadComplete();
//       }
//     }
//   }

//   /// 加载模拟数据
//   Future<void> _loadMockData(bool isRefresh) async {
//     // 使用MedicalMockApis获取患者数据并转换为对话数据
//     final response = await MedicalMockApis.getPatientList(page: 1);
//     final patients = response['data']['list'] as List<Map<String, dynamic>>;
//     final mockConversations = patients.map((patient) {
//       final random = Random();
//       final messages = [
//         '医生，我最近总是头疼，是什么原因呢？',
//         '谢谢医生的建议，我会按时服药的',
//         '医生，我的血压有点高，需要注意什么？',
//         '请问这个药需要饭前还是饭后服用？',
//         '我感觉症状有所好转，还需要继续治疗吗？',
//         '[图片]',
//         '[语音]',
//       ];
//       final messageTypes = [
//         'text',
//         'text',
//         'text',
//         'text',
//         'text',
//         'image',
//         'voice'
//       ];
//       final statuses = ['在线', '离线', '紧急'];

//       final messageIndex = random.nextInt(messages.length);

//       return ConversationModel(
//         id: 'conv_${patient['id']}',
//         patientId: patient['id']?.toString(),
//         patientName: patient['name']?.toString(),
//         patientAvatar: globalConfig.defaultAvatarUrl,
//         patientPhone: patient['phone']?.toString(),
//         patientGender: patient['gender']?.toString(),
//         patientAge: patient['age'] as int?,
//         lastMessage: messages[messageIndex],
//         lastMessageType: messageTypes[messageIndex],
//         lastMessageTime: DateTime.now().subtract(Duration(
//           minutes: random.nextInt(1440), // 0-24小时内的随机时间
//         )),
//         unreadCount: random.nextInt(5), // 0-4条未读消息
//         isOnline: random.nextBool(),
//         status: statuses[random.nextInt(statuses.length)],
//       );
//     }).toList();

//     // 添加导入Random类
//     // import 'dart:math';

//     // 按时间排序，最新的在前面
//     mockConversations.sort((a, b) => (b.lastMessageTime ?? DateTime.now())
//         .compareTo(a.lastMessageTime ?? DateTime.now()));

//     // 根据状态和搜索关键词过滤
//     List<ConversationModel> filteredConversations = mockConversations;

//     if (selectedStatus.value != '全部') {
//       if (selectedStatus.value == '未读') {
//         filteredConversations = filteredConversations
//             .where((conv) => conv.unreadCount != null && conv.unreadCount! > 0)
//             .toList();
//       } else {
//         filteredConversations = filteredConversations
//             .where((conv) => conv.status == selectedStatus.value)
//             .toList();
//       }
//     }

//     if (searchKeyword.value.isNotEmpty) {
//       filteredConversations = filteredConversations
//           .where((conv) =>
//               conv.patientName?.contains(searchKeyword.value) == true ||
//               conv.patientPhone?.contains(searchKeyword.value) == true)
//           .toList();
//     }

//     if (isRefresh) {
//       conversations.clear();
//     }
//     conversations.addAll(filteredConversations);
//     hasMore = false;
//   }

//   /// 加载未读通知数量
//   Future<void> loadUnreadNotificationCount() async {
//     try {
//       // 这里可以从服务器获取未读通知数量
//       // 暂时使用模拟数据
//       unreadNotificationCount.value = 5;
//     } catch (e) {
//       debugLog('加载未读通知数量失败: $e');
//     }
//   }

//   /// 下拉刷新
//   Future<void> onRefresh() async {
//     await loadConversations(isRefresh: true);
//   }

//   /// 上拉加载更多
//   Future<void> onLoadMore() async {
//     if (hasMore) {
//       await loadConversations();
//     } else {
//       refreshController.loadNoData();
//     }
//   }

//   /// 搜索
//   void onSearch(String keyword) {
//     searchKeyword.value = keyword;
//     onRefresh();
//   }

//   /// 清除搜索
//   void clearSearch() {
//     searchController.clear();
//     searchKeyword.value = '';
//     onRefresh();
//   }

//   /// 状态改变
//   void onStatusChanged(String status) {
//     selectedStatus.value = status;
//     onRefresh();
//   }

//   /// 对话点击
//   void onConversationTap(ConversationModel conversation) {
//     // 标记消息为已读
//     markAsRead(conversation.id!);

//     // TODO: 实现聊天详情页面路由
//     // Get.toNamed(
//     //   RouterIdConfig.chatDetail,
//     //   arguments: {
//     //     'conversation': conversation,
//     //     'patientId': conversation.patientId,
//     //   },
//     // );
//     debugLog('打开聊天详情: ${conversation.patientName}');
//   }

//   /// 通话点击
//   Future<void> onCallTap(ConversationModel conversation) async {
//     try {
//       final phoneNumber = conversation.patientPhone;
//       if (phoneNumber?.isNotEmpty == true) {
//         final uri = Uri.parse('tel:$phoneNumber');
//         if (await canLaunchUrl(uri)) {
//           await launchUrl(uri);
//         } else {
//           Fluttertoast.showToast(
//             msg: '无法拨打电话',
//             toastLength: Toast.LENGTH_SHORT,
//             gravity: ToastGravity.CENTER,
//           );
//         }
//       }
//     } catch (e) {
//       debugLog('拨打电话失败: $e');
//       Fluttertoast.showToast(
//         msg: '拨打电话失败',
//         toastLength: Toast.LENGTH_SHORT,
//         gravity: ToastGravity.CENTER,
//       );
//     }
//   }

//   /// 视频通话点击
//   void onVideoCallTap(ConversationModel conversation) {
//     // TODO: 实现视频通话页面路由
//     // Get.toNamed(
//     //   RouterIdConfig.videoCall,
//     //   arguments: {
//     //     'conversation': conversation,
//     //     'patientId': conversation.patientId,
//     //   },
//     // );
//     debugLog('开始视频通话: ${conversation.patientName}');
//   }

//   /// 通知点击
//   void onNotificationTap() {
//     // TODO: 实现通知列表页面路由
//     // Get.toNamed(RouterIdConfig.notificationList);
//     debugLog('打开通知列表');
//   }

//   /// 群聊点击
//   void onGroupChatTap() {
//     // TODO: 实现群聊列表页面路由
//     // Get.toNamed(RouterIdConfig.groupChatList);
//     debugLog('打开群聊列表');
//   }

//   /// 新建聊天点击
//   void onNewChatTap() {
//     // TODO: 实现患者列表页面路由
//     // Get.toNamed(RouterIdConfig.patientList, arguments: {'selectMode': true});
//     debugLog('新建聊天');
//   }

//   /// 标记消息为已读
//   Future<void> markAsRead(String conversationId) async {
//     try {
//       // TODO: 实现 MedicalApis.markMessageAsRead API 调用
//       // final response = await MedicalApis.markMessageAsRead(conversationId);
//       //
//       // if (response.isSuccess) {
//       //   // 更新本地数据
//       //   final index = conversations.indexWhere((conv) => conv.id == conversationId);
//       //   if (index != -1) {
//       //     conversations[index] = conversations[index].copyWith(unreadCount: 0);
//       //   }
//       // }

//       // 暂时直接更新本地数据
//       final index =
//           conversations.indexWhere((conv) => conv.id == conversationId);
//       if (index != -1) {
//         conversations[index] = conversations[index].copyWith(unreadCount: 0);
//       }
//     } catch (e) {
//       debugLog('标记已读失败: $e');
//     }
//   }

//   /// 获取未读数量
//   int getUnreadCount(String status) {
//     if (status == '全部') {
//       return conversations
//           .where((conv) => conv.unreadCount != null && conv.unreadCount! > 0)
//           .length;
//     } else if (status == '未读') {
//       return conversations
//           .where((conv) => conv.unreadCount != null && conv.unreadCount! > 0)
//           .length;
//     } else {
//       return conversations
//           .where((conv) =>
//               conv.status == status &&
//               conv.unreadCount != null &&
//               conv.unreadCount! > 0)
//           .length;
//     }
//   }

//   /// 格式化时间
//   String formatTime(DateTime? time) {
//     if (time == null) return '';

//     final now = DateTime.now();
//     final difference = now.difference(time);

//     if (difference.inMinutes < 1) {
//       return '刚刚';
//     } else if (difference.inMinutes < 60) {
//       return '${difference.inMinutes}分钟前';
//     } else if (difference.inHours < 24) {
//       return '${difference.inHours}小时前';
//     } else if (difference.inDays < 7) {
//       return '${difference.inDays}天前';
//     } else {
//       return '${time.month}/${time.day}';
//     }
//   }

//   /// 获取消息类型图标
//   IconData getMessageTypeIcon(String? messageType) {
//     switch (messageType) {
//       case 'text':
//         return Icons.chat_bubble_outline;
//       case 'image':
//         return Icons.image;
//       case 'voice':
//         return Icons.mic;
//       case 'video':
//         return Icons.videocam;
//       case 'file':
//         return Icons.attach_file;
//       default:
//         return Icons.chat_bubble_outline;
//     }
//   }

//   /// 发送消息
//   Future<void> sendMessage(
//       String conversationId, String content, String type) async {
//     try {
//       // TODO: 实现 MedicalApis.sendMessage API 调用
//       // final response = await MedicalApis.sendMessage(
//       //   conversationId: conversationId,
//       //   content: content,
//       //   type: type,
//       // );
//       //
//       // if (response.isSuccess) {
//       //   // 更新对话列表
//       //   final index = conversations.indexWhere((conv) => conv.id == conversationId);
//       //   if (index != -1) {
//       //     conversations[index] = conversations[index].copyWith(
//       //       lastMessage: content,
//       //       lastMessageType: type,
//       //       lastMessageTime: DateTime.now(),
//       //     );
//       //   }
//       // }

//       // 暂时直接更新本地数据
//       final index =
//           conversations.indexWhere((conv) => conv.id == conversationId);
//       if (index != -1) {
//         conversations[index] = conversations[index].copyWith(
//           lastMessage: content,
//           lastMessageType: type,
//           lastMessageTime: DateTime.now(),
//         );
//       }
//     } catch (e) {
//       debugLog('发送消息失败: $e');
//     }
//   }

//   /// 删除对话
//   Future<void> deleteConversation(String conversationId) async {
//     try {
//       // TODO: 实现 MedicalApis.deleteConversation API 调用
//       // final response = await MedicalApis.deleteConversation(conversationId);
//       //
//       // if (response.isSuccess) {
//       //   conversations.removeWhere((conv) => conv.id == conversationId);
//       //   Fluttertoast.showToast(
//       //     msg: '删除成功',
//       //     toastLength: Toast.LENGTH_SHORT,
//       //     gravity: ToastGravity.CENTER,
//       //   );
//       // }

//       // 暂时直接删除本地数据
//       conversations.removeWhere((conv) => conv.id == conversationId);
//       Fluttertoast.showToast(
//         msg: '删除成功',
//         toastLength: Toast.LENGTH_SHORT,
//         gravity: ToastGravity.CENTER,
//       );
//     } catch (e) {
//       debugLog('删除对话失败: $e');
//       Fluttertoast.showToast(
//         msg: '删除失败',
//         toastLength: Toast.LENGTH_SHORT,
//         gravity: ToastGravity.CENTER,
//       );
//     }
//   }

//   /// 置顶对话
//   Future<void> pinConversation(String conversationId, bool isPinned) async {
//     try {
//       // TODO: 实现 MedicalApis.pinConversation API 调用
//       // final response = await MedicalApis.pinConversation(conversationId, isPinned);
//       //
//       // if (response.isSuccess) {
//       //   final index = conversations.indexWhere((conv) => conv.id == conversationId);
//       //   if (index != -1) {
//       //     conversations[index] = conversations[index].copyWith(isPinned: isPinned);
//       //   }
//       // }

//       // 暂时直接更新本地数据
//       final index =
//           conversations.indexWhere((conv) => conv.id == conversationId);
//       if (index != -1) {
//         conversations[index] =
//             conversations[index].copyWith(isPinned: isPinned);
//       }
//     } catch (e) {
//       debugLog('置顶对话失败: $e');
//     }
//   }

//   /// 屏蔽对话
//   Future<void> muteConversation(String conversationId, bool isMuted) async {
//     try {
//       // TODO: 实现 MedicalApis.muteConversation API 调用
//       // final response = await MedicalApis.muteConversation(conversationId, isMuted);
//       //
//       // if (response.isSuccess) {
//       //   final index = conversations.indexWhere((conv) => conv.id == conversationId);
//       //   if (index != -1) {
//       //     conversations[index] = conversations[index].copyWith(isMuted: isMuted);
//       //   }
//       //
//       //   Fluttertoast.showToast(
//       //     msg: isMuted ? '已屏蔽' : '取消屏蔽',
//       //     toastLength: Toast.LENGTH_SHORT,
//       //     gravity: ToastGravity.CENTER,
//       //   );
//       // }

//       // 暂时直接更新本地数据
//       final index =
//           conversations.indexWhere((conv) => conv.id == conversationId);
//       if (index != -1) {
//         conversations[index] = conversations[index].copyWith(isMuted: isMuted);
//       }

//       Fluttertoast.showToast(
//         msg: isMuted ? '已屏蔽' : '取消屏蔽',
//         toastLength: Toast.LENGTH_SHORT,
//         gravity: ToastGravity.CENTER,
//       );
//     } catch (e) {
//       debugLog('屏蔽操作失败: $e');
//     }
//   }

//   /// 获取对话详情
//   Future<ConversationModel?> getConversationDetail(
//       String conversationId) async {
//     try {
//       // TODO: 实现 MedicalApis.getConversationDetail API 调用
//       // final response = await MedicalApis.getConversationDetail(conversationId);
//       //
//       // if (response.isSuccess && response.data != null) {
//       //   return ConversationModel.fromJson(response.data);
//       // }

//       // 暂时返回本地数据
//       return conversations.firstWhere(
//         (conv) => conv.id == conversationId,
//         orElse: () => ConversationModel(id: conversationId),
//       );
//     } catch (e) {
//       debugLog('获取对话详情失败: $e');
//     }
//     return null;
//   }

//   /// 更新在线状态
//   void updateOnlineStatus(String patientId, bool isOnline) {
//     final index =
//         conversations.indexWhere((conv) => conv.patientId == patientId);
//     if (index != -1) {
//       conversations[index] = conversations[index].copyWith(isOnline: isOnline);
//     }
//   }

//   /// 添加新消息
//   void addNewMessage(String conversationId, String content, String type) {
//     final index = conversations.indexWhere((conv) => conv.id == conversationId);
//     if (index != -1) {
//       final conversation = conversations[index];
//       conversations[index] = conversation.copyWith(
//         lastMessage: content,
//         lastMessageType: type,
//         lastMessageTime: DateTime.now(),
//         unreadCount: (conversation.unreadCount ?? 0) + 1,
//       );

//       // 将对话移到列表顶部
//       conversations.removeAt(index);
//       conversations.insert(0, conversations[index]);
//     }
//   }
// }

// /// 对话模型
// class ConversationModel {
//   final String? id;
//   final String? patientId;
//   final String? patientName;
//   final String? patientAvatar;
//   final String? patientPhone;
//   final String? patientGender;
//   final int? patientAge;
//   final String? lastMessage;
//   final String? lastMessageType;
//   final DateTime? lastMessageTime;
//   final int? unreadCount;
//   final bool? isOnline;
//   final String? status;
//   final bool? isPinned;
//   final bool? isMuted;

//   ConversationModel({
//     this.id,
//     this.patientId,
//     this.patientName,
//     this.patientAvatar,
//     this.patientPhone,
//     this.patientGender,
//     this.patientAge,
//     this.lastMessage,
//     this.lastMessageType,
//     this.lastMessageTime,
//     this.unreadCount,
//     this.isOnline,
//     this.status,
//     this.isPinned,
//     this.isMuted,
//   });

//   factory ConversationModel.fromJson(Map<String, dynamic> json) {
//     return ConversationModel(
//       id: json['id']?.toString(),
//       patientId: json['patient_id']?.toString(),
//       patientName: json['patient_name']?.toString(),
//       patientAvatar: json['patient_avatar']?.toString(),
//       patientPhone: json['patient_phone']?.toString(),
//       patientGender: json['patient_gender']?.toString(),
//       patientAge: json['patient_age'] is int
//           ? json['patient_age']
//           : int.tryParse(json['patient_age']?.toString() ?? ''),
//       lastMessage: json['last_message']?.toString(),
//       lastMessageType: json['last_message_type']?.toString(),
//       lastMessageTime: json['last_message_time'] != null
//           ? DateTime.tryParse(json['last_message_time'].toString())
//           : null,
//       unreadCount: json['unread_count'] is int
//           ? json['unread_count']
//           : int.tryParse(json['unread_count']?.toString() ?? '0'),
//       isOnline: json['is_online'] is bool
//           ? json['is_online']
//           : json['is_online']?.toString().toLowerCase() == 'true',
//       status: json['status']?.toString(),
//       isPinned: json['is_pinned'] is bool
//           ? json['is_pinned']
//           : json['is_pinned']?.toString().toLowerCase() == 'true',
//       isMuted: json['is_muted'] is bool
//           ? json['is_muted']
//           : json['is_muted']?.toString().toLowerCase() == 'true',
//     );
//   }

//   Map<String, dynamic> toJson() {
//     return {
//       'id': id,
//       'patient_id': patientId,
//       'patient_name': patientName,
//       'patient_avatar': patientAvatar,
//       'patient_phone': patientPhone,
//       'patient_gender': patientGender,
//       'patient_age': patientAge,
//       'last_message': lastMessage,
//       'last_message_type': lastMessageType,
//       'last_message_time': lastMessageTime?.toIso8601String(),
//       'unread_count': unreadCount,
//       'is_online': isOnline,
//       'status': status,
//       'is_pinned': isPinned,
//       'is_muted': isMuted,
//     };
//   }

//   ConversationModel copyWith({
//     String? id,
//     String? patientId,
//     String? patientName,
//     String? patientAvatar,
//     String? patientPhone,
//     String? patientGender,
//     int? patientAge,
//     String? lastMessage,
//     String? lastMessageType,
//     DateTime? lastMessageTime,
//     int? unreadCount,
//     bool? isOnline,
//     String? status,
//     bool? isPinned,
//     bool? isMuted,
//   }) {
//     return ConversationModel(
//       id: id ?? this.id,
//       patientId: patientId ?? this.patientId,
//       patientName: patientName ?? this.patientName,
//       patientAvatar: patientAvatar ?? this.patientAvatar,
//       patientPhone: patientPhone ?? this.patientPhone,
//       patientGender: patientGender ?? this.patientGender,
//       patientAge: patientAge ?? this.patientAge,
//       lastMessage: lastMessage ?? this.lastMessage,
//       lastMessageType: lastMessageType ?? this.lastMessageType,
//       lastMessageTime: lastMessageTime ?? this.lastMessageTime,
//       unreadCount: unreadCount ?? this.unreadCount,
//       isOnline: isOnline ?? this.isOnline,
//       status: status ?? this.status,
//       isPinned: isPinned ?? this.isPinned,
//       isMuted: isMuted ?? this.isMuted,
//     );
//   }
}
